{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Getting Started"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "This Jupyter notebook is a short demonstration of Python for scientific data analysis.\n",
    "It covers the following points:\n",
    "\n",
    "* Plotting a sine wave\n",
    "* Generating a column matrix of data\n",
    "* Writing data to a text-file, and reading data from a text-file\n",
    "* Waiting for a button-press to continue the program exectution\n",
    "* Using a dictionary, which is similar to MATLAB structures\n",
    "* Extracting data which fulfill a certain condition\n",
    "* Calculating the best-fit-line to noisy data\n",
    "* Formatting text-output\n",
    "* Waiting for a keyboard-press\n",
    "* Calculating confidence intervals for line-fits\n",
    "* Saving figures\n",
    "\n",
    "author: Thomas Haslwanter\n",
    "date:   Dec-2019"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Modules and Packages"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "fragment"
    }
   },
   "source": [
    "In contrast to MATLAB, you explicitly have to load the modules that you need.\n",
    "And don't worry here about not knowing the right modules: *numpy*, *scipy*, and\n",
    "*matplotlib.pyplot* are almost everything you will need most of the time, and you\n",
    "will quickly get used to those."
   ]
  },
  {
   "cell_type": "raw",
   "metadata": {},
   "source": [
    "import numpy as np                  # for working with vectors and matrices\n",
    "import matplotlib.pyplot as plt     # for plotting"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Sine Wave"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Data have been saved to test.txt.\n"
     ]
    }
   ],
   "source": [
    "# Note: single comment lines are indicated by \"#\".\n",
    "\n",
    "# Create a sine-wave\n",
    "t = np.arange(0,10,0.1)\n",
    "x = np.sin(t)\n",
    "\n",
    "# The basic numerical functions, as well as everything with vector ans matrices \n",
    "# is in the package \"numpy\".\n",
    "\n",
    "# Next, save the data in a text-file, in column form.\n",
    "out_file = 'test.txt'\n",
    "np.savetxt(out_file, np.column_stack([t,x]) )\n",
    "\n",
    "# For displaying formatted text, the \"format-strings\" introduced in Python 3.5\n",
    "# are definitely the most elegant way: they allow to use known variables directly\n",
    "# in the \"print\"-statement\n",
    "print(f'Data have been saved to {out_file}.')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x27f297a1808>]"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Read the data into a different variable\n",
    "inData = np.loadtxt(out_file)\n",
    "t2 = inData[:,0] # Note that Python starts at \"0\"!\n",
    "x2 = inData[:,1]\n",
    "\n",
    "# Note: Python used (...) for function arguments, and [...] for indexing.\n",
    "\n",
    "# Plot the data\n",
    "plt.plot(t, np.cos(t))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Rotating a Vector"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "When working with vectors and matrices, keep the following things in mind\n",
    "* By default, data are vectors.\n",
    "* Use *array* when you want to generate matrices."
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Noisy Data and Linefits"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "Fit the following function: $y = k*x + d$"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "# Generate a noisy line\n",
    "t = np.arange(-100, 100)\n",
    "\n",
    "# use a Python \"dictionary\" for named variables\n",
    "par = {'offset':100, 'slope':0.5, 'noiseAmp':4}\n",
    "\n",
    "# Everything with random numbers is in the numpy sub-package \"np.random\"\n",
    "x = par['offset'] + par['slope']*t + par['noiseAmp']*np.random.randn(len(t))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[<matplotlib.lines.Line2D at 0x27f29865808>]"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Boolean indexing works in Python: select \"late\" values, i.e. with t>10\n",
    "x_high = x[t>10]\n",
    "t_high = t[t>10]\n",
    "\n",
    "# Plot the \"late\" data\n",
    "plt.plot(t_high, x_high)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 4, 5, 6, 7])"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# Boolean indices can be combined:\n",
    "x = np.arange(10)\n",
    "top_range = x>2\n",
    "bottom_range = x<8\n",
    "x[top_range & bottom_range]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "   ## Fitting a line to the data"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [],
   "source": [
    "# Determine the best-fit line\n",
    "# To do so, you have to generate a so-called Design Matrix, with \"time\" in the first\n",
    "# column, and a column of \"1\" in the second column:\n",
    "x_mat = np.column_stack( [t_high, np.ones(len(t_high))])\n",
    "\n",
    "# A numerical detail: For the least-squares solution to a linear matrix equation,\n",
    "# the optional parameter \"rcond\" determines how  small singular values\n",
    "# of the matrix are handled.\n",
    "slope, intercept = np.linalg.lstsq(x_mat, x_high, rcond=None)[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "Fit line: intercept = {intercept:5.3f}, and slope = {slope:5.3f}\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "# Show and plot the fit, and save it to a PNG-file with a medium resolution.\n",
    "# The \"modern\" way of Python-formatting is used\n",
    "plt.plot(t_high, x_high)\n",
    "plt.plot(t_high, intercept + slope*t_high, 'r')\n",
    "plt.savefig('linefit.png', dpi=200)\n",
    "print(r'Fit line: intercept = {intercept:5.3f}, and slope = {slope:5.3f}')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# Pandas"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "jupyter": {
     "outputs_hidden": false
    },
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "                 Results: Ordinary least squares\n",
      "=================================================================\n",
      "Model:              OLS              Adj. R-squared:     0.921   \n",
      "Dependent Variable: y                AIC:                491.2522\n",
      "Date:               2020-04-14 17:54 BIC:                496.2295\n",
      "No. Observations:   89               Log-Likelihood:     -243.63 \n",
      "Df Model:           1                F-statistic:        1034.   \n",
      "Df Residuals:       87               Prob (F-statistic): 4.60e-50\n",
      "R-squared:          0.922            Scale:              14.290  \n",
      "------------------------------------------------------------------\n",
      "             Coef.   Std.Err.     t      P>|t|    [0.025   0.975] \n",
      "------------------------------------------------------------------\n",
      "Intercept   99.9066    0.9468  105.5160  0.0000  98.0246  101.7885\n",
      "x            0.5015    0.0156   32.1528  0.0000   0.4705    0.5325\n",
      "-----------------------------------------------------------------\n",
      "Omnibus:               0.119        Durbin-Watson:          2.000\n",
      "Prob(Omnibus):         0.942        Jarque-Bera (JB):       0.057\n",
      "Skew:                  -0.058       Prob(JB):               0.972\n",
      "Kurtosis:              2.958        Condition No.:          143  \n",
      "=================================================================\n",
      "\n"
     ]
    }
   ],
   "source": [
    "# If you want to know confidence intervals, best switch to *pandas*\n",
    "# Pandas is mainly used for statistics and worksheet-like data\n",
    "import pandas as pd\n",
    "\n",
    "# The calculation of OLS has been moved to *statsmodels* now\n",
    "import statsmodels.formula.api as smf\n",
    "\n",
    "# Note that this is an advanced topic, and requires new data structures\n",
    "# such ad \"DataFrames\" and \"ordinary-least-squares\" or \"ols-models\".\n",
    "my_dict = {'x':t_high, 'y':x_high}\n",
    "df = pd.DataFrame(my_dict)\n",
    "model = smf.ols('y~x', df).fit()\n",
    "print(model.summary2())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "slide"
    }
   },
   "source": [
    "# More Python Info on the Web"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {
    "slideshow": {
     "slide_type": "subslide"
    }
   },
   "source": [
    "[http://scipy-lectures.github.com/](http://scipy-lectures.github.com/) Python Scientifc Lecture Notes. **If you read nothing else, read this!**\n",
    "\n",
    "[https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html](https://docs.scipy.org/doc/numpy/user/numpy-for-matlab-users.html) Start here if you have lots of Matlab experience.\n",
    "\n",
    "[https://docs.python.org/3.7/tutorial/](https://docs.python.org/3.6/tutorial/) The Python tutorial. The original introduction.\n",
    "\n",
    "[http://jrjohansson.github.com/](http://jrjohansson.github.com/) Lectures on scienti\f",
    "c computing with Python. Great ipython notebooks!"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.6"
  },
  "toc": {
   "base_numbering": 1,
   "nav_menu": {},
   "number_sections": true,
   "sideBar": true,
   "skip_h1_title": false,
   "title_cell": "Table of Contents",
   "title_sidebar": "Contents",
   "toc_cell": false,
   "toc_position": {},
   "toc_section_display": true,
   "toc_window_display": false
  },
  "varInspector": {
   "cols": {
    "lenName": 16,
    "lenType": 16,
    "lenVar": 40
   },
   "kernels_config": {
    "python": {
     "delete_cmd_postfix": "",
     "delete_cmd_prefix": "del ",
     "library": "var_list.py",
     "varRefreshCmd": "print(var_dic_list())"
    },
    "r": {
     "delete_cmd_postfix": ") ",
     "delete_cmd_prefix": "rm(",
     "library": "var_list.r",
     "varRefreshCmd": "cat(var_dic_list()) "
    }
   },
   "types_to_exclude": [
    "module",
    "function",
    "builtin_function_or_method",
    "instance",
    "_Feature"
   ],
   "window_display": false
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
